The two-phase commit protocol is used to coordinate distributed atomic transactions. In the first phase, a transaction manager instructs all transaction participants (e.g., distributed database nodes) to execute their respective portions of a transaction. In the second phase, and based on responses received from the transaction participants during the first phase, the transaction manager instructs the transaction participants to commit or to roll-back the transaction.
The two-phase commit protocol may provide transaction consistency within heterogenous distributed database systems, but does not support true isolation level semantics. For example, if a transaction is run at the SERIALIZABLE isolation level, table versions referenced by all transaction participants must be synchronized to the time at which the transaction began. Outside of a transaction, a statement which references tables on two distributed database nodes should reference versions of the tables as they existed at time the statement began.